package alexico;

import java.util.HashMap;

public class TablaDeSimbolos {
	public static HashMap<String, Simbolo> simbolos = new HashMap<String, Simbolo>();
	
	public static String addSimbol(Simbolo simbol){
		String aux = "";
		if (!simbol.getId().contains("CONSTANTE") && !simbol.getTipo().equals("Funcion")){
			aux = simbol.getId() + simbol.getAmbito();
			simbolos.put(aux, simbol);
		} else {
			aux = generarNextString();
			simbolos.put(aux, simbol);
		}
		return aux;
	}
	
	private static int val = 0;
	private static String generarNextString() {
		return "variable_anonima"+(val++);
	}
	
	public static boolean exist(String id){
		return simbolos.containsKey(id);
	}
	
	public static Simbolo getSimbol(String id){
		return simbolos.get(id);
	}
	
	@Override
	public String toString(){
		return simbolos.toString();
	}
	
	public static void duplicarValorParametro(String var, String newName, String ambito){
		Simbolo s = getSimbol(var);
		if (s != null){
			Simbolo simbol=new Simbolo(newName, s.getValue(), "COPIA_" + s.getTipo(), ambito);
			TablaDeSimbolos.addSimbol(simbol);
		}
	}
	
	public static String findValueOfSimbolo (String key){
		for (Simbolo s:simbolos.values()){
			if (s.getId().equals(key) && !s.getValue().isEmpty()){
				return s.getValue();
			}
		}
		return "0";
	}
	
	public static String buscarVariableCopia (String nameFuncion){
		for (Simbolo s:simbolos.values()){
			if (s.getAmbito().contains(nameFuncion) && s.getTipo().contains("Copia")){
				return s.getId();
			}
		}
		return "variable copia no esta en la ts";
	}
}